import { defineStore } from 'pinia'
import { ref } from 'vue'
import { wsManager } from '@/utils/websocket'
import { userAPI } from '@/api/user'

export const useUserStore = defineStore('user', () => {
  // 状态
  const isLoggedIn = ref(false)
  const userInfo = ref(null)
  const token = ref(null)
  
  // Actions
  const login = (userToken, user) => {
    token.value = userToken
    userInfo.value = user
    isLoggedIn.value = true
    
    // 保存到localStorage
    localStorage.setItem('token', userToken)
    localStorage.setItem('user_info', JSON.stringify(user))
    
    // 连接WebSocket（用户登录后建立WebSocket连接，用于聊天系统）
    if (user && user.id) {
      const clientName = user.name || user.username || user.nickname || `用户${user.id}`
      wsManager.connect(String(user.id), clientName)
      
      // 监听消息（接收聊天消息和系统通知）
      wsManager.onMessage((message) => {
        // 处理系统消息
        if (message.type === 'system') {
          import('@/utils/notification').then(({ showInfo }) => {
            showInfo(message.message || '系统通知')
          }).catch(() => {
            console.log('[系统消息]', message.message)
          })
        }
        // 处理聊天消息
        else if (message.type === 'chat') {
          console.log('[聊天消息]', `来自 ${message.from_name}: ${message.content}`)
          // 可以在这里触发聊天消息的事件或更新聊天记录
        }
        // 兼容旧的消息格式（字符串）
        else if (typeof message === 'string') {
          if (message === '验证成功') {
            import('@/utils/notification').then(({ showSuccess }) => {
              showSuccess('身份证验证成功！')
            }).catch(() => {
              alert('身份证验证成功！')
            })
          } else if (message.includes('验证失败')) {
            import('@/utils/notification').then(({ showError }) => {
              showError(message)
            }).catch(() => {
              alert(message)
            })
          }
        }
      })
    }
  }
  
  const logout = () => {
    token.value = null
    userInfo.value = null
    isLoggedIn.value = false
    
    // 清除localStorage
    localStorage.removeItem('token')
    localStorage.removeItem('user_info')
    
    // 断开WebSocket连接
    wsManager.disconnect()
  }
  
  const checkAuth = () => {
    const storedToken = localStorage.getItem('token')
    const storedUser = localStorage.getItem('user_info')
    
    if (storedToken && storedUser) {
      token.value = storedToken
      try {
        const user = JSON.parse(storedUser)
        userInfo.value = user
        isLoggedIn.value = true
        
        // 如果用户已登录，连接WebSocket
        if (user && user.id) {
          const clientName = user.name || user.username || user.nickname || `用户${user.id}`
          wsManager.connect(String(user.id), clientName)
          
          // 监听消息
          wsManager.onMessage((message) => {
            // 处理系统消息
            if (message.type === 'system') {
              import('@/utils/notification').then(({ showInfo }) => {
                showInfo(message.message || '系统通知')
              }).catch(() => {
                console.log('[系统消息]', message.message)
              })
            }
            // 处理聊天消息
            else if (message.type === 'chat') {
              console.log('[聊天消息]', `来自 ${message.from_name}: ${message.content}`)
              // 可以在这里触发聊天消息的事件或更新聊天记录
            }
            // 兼容旧的消息格式（字符串）
            else if (typeof message === 'string') {
              if (message === '验证成功') {
                import('@/utils/notification').then(({ showSuccess }) => {
                  showSuccess('身份证验证成功！')
                }).catch(() => {
                  alert('身份证验证成功！')
                })
              } else if (message.includes('验证失败')) {
                import('@/utils/notification').then(({ showError }) => {
                  showError(message)
                }).catch(() => {
                  alert(message)
                })
              }
            }
          })
        }
      } catch (e) {
        console.error('解析用户信息失败:', e)
      }
    }
  }
  
  // 初始化检查
  checkAuth()
  
  const refreshUserInfo = async () => {
    try {
      const res = await userAPI.getCurrentUser()
      const info = res?.data?.user
      if (info) {
        userInfo.value = {
          ...userInfo.value,
          ...info
        }
        return info
      }
      return null
    } catch (error) {
      console.error('刷新用户信息失败:', error)
      throw error
    }
  }
  
  return {
    isLoggedIn,
    userInfo,
    token,
    login,
    logout,
    checkAuth,
    refreshUserInfo
  }
})

